using UnityEngine;
using System.Collections;

public abstract class Linea : MonoBehaviour {
	
	
	public Transform inicio;
	public Transform destino;
	
	public bool drawLines;
	
	public bool visible;
	
	/// <summary>
	/// El valor t oscilará entre 0 y 1 y será usado por CalculatePoint para devolver en que punto de la linea estamos.
	/// </summary>
	protected float t = 0f;
	
	protected float length;
	
	
	/// <summary>
	/// Gets the static lenght. Solo calcula la distancia en la inicialización al script, por tanto no cambia su valor dinamicamente, pero ahorra operaciones
	/// </summary>
	/// <value>
	/// The static lenght.
	/// </value>
	public float StaticLenght
	{
		get{ return length; }
	}

	
	/// <summary>
	/// Calculates the point. Función encargada de devolvernos el punto del espacio que corresponde con el t de la linea
	/// </summary>
	/// <returns>
	/// The point.
	/// </returns>
	/// <param name='t'>
	/// T.
	/// </param>
	public abstract Vector3 CalculatePoint(float t);
	
	
	/// <summary>
	/// Length this instance. Usaremos esta función siempre que querramos calcular la distancia en tiempo real. Pesa más.
	/// </summary>
	public abstract float Length();
	
	//
	
	
	/// <summary>
	/// Función utilidad que nos permite saber la longitud de una recta dados dos puntos
	/// </summary>
	/// <returns>
	/// The pitagoras.
	/// </returns>
	/// <param name='inicio'>
	/// Inicio.
	/// </param>
	/// <param name='destino'>
	/// Destino.
	/// </param>
	public static float longitudPitagoras(Vector3 inicio, Vector3 destino)
	{
		float xpow = Mathf.Pow( (destino.x-inicio.x),2F);
		float ypow = Mathf.Pow( (destino.y-inicio.y),2F);
		return Mathf.Sqrt( xpow + ypow );
		
	}
	
	/// <summary>
	/// Pasamos como distancia aquella en la que se encuentra distance respecto del punto de inicio de su linea
	/// </summary>
	/// <returns>
	/// The point to01.
	/// </returns>
	/// <param name='distance'>
	/// Distance.
	/// </param>
	public Vector3 CalculatePointTo01(float distance)
	{
		float Punto01 = distance/StaticLenght;
		return CalculatePoint(Punto01);
		
	}
	
	
	
	
}
